小毛驴

Adventure may hurt you, but monotony will kill you.

0%

深度学习语义相似度模型旨在学习输入$x$的一个好的特征表示,使得该特征表示能够捕捉到输入的本质结构,且能够促进后续的学习任务,如分类或聚类任务。一般地,我们用深度网络的某个中间层输出作为学习到的特征表示,基于该特征表示可以较方便地得到后续的分类结果,过程如下式所示,其中 $z=f(x,\theta) \in R^d$ 即为学习到的特征表示。

那么什么样的特征表示才是一个好的表示呢?其实,这个问题是和具体任务相关的,不同任务对特征表示的要求是不一样的,因而,我们不能期待在一个任务中有效的特征表示在另一个不同领域的任务上也同样有效。抛开具体任务不谈,原则上,我们期望特征表示既具有一定的信息量(informative),能够充分还原原始输入;又具有一定的区分性(discriminative),能够有效区别开不同类别的输入。从信息论的角度来说,期望能够在最小化原始输入与特征表示的互信息的同时最大化特征表示与目标类别的互信息,形式化如下:

其中,$\beta>0$,用来调节信息量与区分性的权重。

阅读全文 »

我们在基于深度学习的语义相似度模型系列文章的开篇《深度学习语义相似度系列:概论》中介绍了两种语义相似度的学习范式,其中第一种范式的重点是表示学习,也就是为输入对象学习一个低维稠密的embedding向量,使得基于此embedding向量计算的相似度能够很好地反映原始对象之间的相似性。本文主要介绍一种在第一范式下的相似度学习模型的设计。

相似度度量建模

一般而言,相似度度量可以建模为回归问题,也可以建模为分类问题,甚至可以建模为排序问题。取决于我们有什么格式的标签数据。

阅读全文 »

语义相似度有很多重要的应用场景,比如在检索系统中用来做语义召回,或者作为精排的特征。基于文本语义相似度模型做相似检索可以辅助文本分类,能够弥补分类模型更新迭代周期长的问题。在智能问答系统中,文本语义相似度模型也能发挥很大的作用。

目前,学习相似度的深度学习范式主要有两种,如下图所示。

阅读全文 »

多样性和相关性是衡量推荐系统的常用的指标,这两个指标同时影响着推荐系统的商业目标和用户体验。Hulu在NIPS 2018 会议上发表的论文《Fast Greedy MAP Inference for Determinantal Point Process to Improve Recommendation Diversity》中,提出了基于行列式点过程的推荐多样性提升算法,虽然网上可以找到很多解读文章,但个人觉得解释得不是很直观和易懂。本文尝试给出一种更加简单和容易理解的解读,并且给出算法的实现代码,是对自己理解过程的一次总结,也希望能够帮助到读者。

我们有一个待推荐的候选商品集合$Z=\lbrace 1,2,…,M \rbrace$,针对一个给定的用户,推荐系统需要选择商品集合$Z$中的$N$个商品展现给用户,同时希望展现给用户的商品列表满足一定相关性和多样性。这就是我们要解决的问题,那么首先我们必须弄清楚如何衡量相关性和多样性。

阅读全文 »

度量学习(metric learning)研究如何在一个特定的任务上学习一个距离函数,使得该距离函数能够帮助基于近邻的算法(kNN、k-means等)取得较好的性能。深度度量学习(deep metric learning)是度量学习的一种方法,它的目标是学习一个从原始特征到低维稠密的向量空间(称之为嵌入空间,embedding space)的映射,使得同类对象在嵌入空间上使用常用的距离函数(欧氏距离、cosine距离等)计算的距离比较近,而不同类的对象之间的距离则比较远。深度度量学习在计算机视觉领域取得了非常多的成功的应用,比如人脸识别、人脸验证、图像检索、签名验证、行人重识别等。

损失函数在深度度量学习中起到了非常重要的作用。很多深度度量学习的损失函数构建在样本对(pair)或者样本三元组(triplet)之上,因而样本空间的量级($O(N^2)$或者$O(N^3)$)非常大。一般而言,模型在训练过程中很难穷举学习所有的样本对;并且大多数样本对或者样本三元组的信息量是很小的,尤其在模型训练的后期,这些样本对或者样本三元组上梯度值几乎为0。若不做任何针对性的优化,学习算法的收敛速度会很慢,且易陷入局部最优。

困难样本挖掘是加快学习算法的收敛速度,并改进学习效果的一种重要手段。它通常和特定的损失函数一起使用,以期望达到最好的效果。困难样本挖掘可以理解为在学习过程中给每一个样本对动态赋予一个权重。在学习不同样本对时给它们不同的权重,如果某个样本对包含的信息比较多或比较难学习,那么它就需要比较大的权重。信息量较少的样本对则会被赋予较小的权重。若某些样本对被赋予的权重为0,则意味着在计算梯度时不考虑这些样本对,相当于这些样本对被丢弃了。

不同的损失函数在设计时,对于样本对的赋权是不同的,或者说与这些损失函数配合使用的困难样本挖掘方法是不同的。下面列举一些常用的深度度量学习中使用的损失函数,同时了解一下它们是如何来给做困难样本挖掘的。

阅读全文 »

在某些情况下,我们需要度量两个排序列表的距离,或者说相似程度。比如,在信息检索领域,我们可能需要计算在某个查询条件下系统给出的文档的排序列表与一个预先定义好的“完美”排序列表的接近程度。或者我们可能需要比较不同搜索引擎的结果。又或者,在推荐系统中,我们需要监控某次算法迭代(A/B测试)中,新算法针对某个用户给出的推荐列表与旧算法给出的推荐列表的差异程度,以便决定是否要触发自动报警。

在信息检索领域,我们常用MAP、MRR、NDCG来评估排序算法的好坏,然而这些指标依赖人工标注的query与document的相关性档位(relevance level)。当没有此标注数据,或者我们要评估的排序列表跟相关性无关,并且我们刚好有一个待比较的基准列表时,该如何评估它们之间的距离呢?how to measure the similarity between two rank list?

定义这样一个排序列表之间比较的指标,我们期待它能满足以下几个方面:

  • 丰富度(Richness)
    • 能够支持元素加权、位置加权等
    • Support element weights, position weights, etc.
  • 简洁性(Simplicity)
    • 易于理解
    • Be simple to understand
  • 普适性(Generalization)
    • 也能支持不考虑权重的情况
    • Collapse to a natural metric with no weights are present
    • Should behave similar to other approaches
    • Allows us to select a metric best suited to the problem
  • 满足距离定义的基本属性(Satisfy Basic Properties)
    • Scale free, invariant under relabeling, triangle inequality…

排序列表距离度量大致可以分为两大类方法: (1) 基于排序之间的相互关系(Ranked Correlation);(2) 基于集合的度量(Set Based Measure)。

阅读全文 »

Methods that scale with computation are the future of AI.
—Rich Sutton, 强化学习之父

大数据时代的互联网应用产生了大量的数据,这些数据就好比是石油,里面蕴含了大量知识等待被挖掘。深度学习就是挖掘数据中隐藏知识的利器,在许多领域都取得了非常成功的应用。然而,大量的数据使得模型的训练变得复杂,使用多台设备分布式训练成了必备的选择。

Tensorflow是目前比较流行的深度学习框架,本文着重介绍tensorflow框架是如何支持分布式训练的。

阅读全文 »

众所周知,深度学习在计算机视觉、语音识别、自然语言处理等领域最先取得突破并成为主流方法。但是,深度学习为什么是在这些领域而不是其他领域最先成功呢?我想一个原因就是图像、语音、文本数据在空间和时间上具有一定的内在关联性。比如,图像中会有大量的像素与周围的像素比较类似;文本数据中语言会受到语法规则的限制。CNN对于空间特征有很好的学习能力,正如RNN对于时序特征有强大的表示能力一样,因此CNN和RNN在上述领域各领风骚好多年。

在Web-scale的搜索、推荐和广告系统中,特征数据具有高维、稀疏、多类别的特点,一般情况下缺少类图像、语音、文本领域的时空关联性。因此,如何构建合适的网络结构以便在信息检索、推荐系统和计算广告领域取得良好的特征表示能力,进一步提升最终的业务效果成了学术界和工业界共同关注的问题。

本文在跟踪了最近主流的互联网业务中大量使用的排序模型的基础上,总结出了深度CTR、CVR预估模型发展演化的三条主线,跟大家分享。

  1. 第一条主脉络是以FM家族为代表的深度模型,它们的共同特点是自动学习从原始特征交叉组合新的高阶特征。
  2. 第二条主脉络是一类使用attention机制处理时序特征的深度模型,以DIN、DIEN等模型为代表。
  3. 第三条主脉络是以迁移学习、多任务学习为基础的联合训练模型或pre-train机制,以ESMM、DUPN等模型为代表。

其中前两条主脉络虽然出发点不同,但个人认为也有一些共通之处,比如attention机制是不是可以在某种程度上理解为一种特殊形式的组合特征。第三条主脉络属于流程或框架层面的创建。本文的主要目标是理清楚第一条主线中各个经典的深度模型的发展演化脉络,包括它们的优缺点和共通之处。

阅读全文 »

Deep & Cross Network(DCN)在 2017 年由 google 和 Stanford 共同发表的一篇论文中被提出,类似于Wide & Deep Network(WDL),是用负杂网络预估CTR的一种方法。

特征工程一直是许多预测模型成功的关键。许多有效的特征都来自于原始特征的交叉组合。在WDL中,wide侧的交叉组合特征依然需要依靠hand-craft来完成。而DCN能对sparse和dense的输入自动学习特征交叉,可以有效地捕获有限阶(bounded degrees)上的有效特征交叉,无需人工特征工程或暴力搜索(exhaustive searching),并且计算代价较低。

本文在详细介绍Deep & Cross Network网络结构的基础上,给出了高效实现DCN模型的tensorflow代码,主要点出了网络上一些主流实现中常犯的错误,让你真正能够在企业级的生产环境中玩转DCN模型。

阅读全文 »

本文是“基于Tensorflow高阶API构建大规模分布式深度学习模型系列”的第五篇,旨在通过一个完整的案例巩固一下前面几篇文章中提到的各类高阶API的使用方法,同时演示一下用tensorflow高阶API构建一个比较复杂的分布式深度学习模型的完整过程。

文本要实现的深度学习模式是阿里巴巴的算法工程师18年刚发表的论文《Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate》中提出的ESMM模型,关于该模型的详细介绍可以参考我之前的一篇文章:《CVR预估的新思路:完整空间多任务模型》。

阅读全文 »